﻿

using Chapter01.DesignMode;

/**
 * 1 设计模式入门
 * 欢迎来到设计模式世界
 * 有引起人已经解决你的问题了
 * 先从简单的模拟鸭子应用做起
 * 现在我们得让鸭子能飞
 * 但是，可怕的问题发生了……
 * Joe想到继承
 * 利用接口如何？
 * 如果你是Joe，你要怎么办？
 * 软件开发的一个不变真理
 * 把问题归零
 * 分开变化和不会变化的部分
 * 设计鸭子的行为
 * “针对接口编程”真正的意思是“针对超类型编程”
 * 实现鸭子的行为
 * 整合鸭子的行为
 * 更多的整合……
 * 测试Duck的代码
 * 继续测试Duck的代码……
 * 封装行为的大局观
 * “有一个”可能比“是一个”更好
 * 讲到设计模式……
 * 恭喜你，学会了第一个模式了！
 * 策略模式
 * 设计迷题
 * 在附近餐厅中无意间听到……
 * 在办公室隔间中无意间听到……
 * 共享模式词汇的威力
 * 我如何使用设计模式？
 * 怀疑的开发人员
 * 设计工具箱内的工具
 * 设计谜题解答
 * 答案
 * 
 * OO基础
 * 抽象
 * 封装
 * 多态
 * 继承
 * 
 * OO设计原则
 * 封装变化，找出应用中可能需要变化之处，把这们独立出来，不要和那些不需要变化的代码混在一起
 * 多用组合，少用继承
 * 针对接口编程，而不是针对实现编程
 * 
 * OO模式
 * 策略模式——定义算法族，分别封装起来，让它们之间可以互相替换，此模式让算法的变化独立于使用算法的客户
 */
var mallard = new MallarkDuck();
mallard.PerformQuack();
mallard.PerformFly();

var model = new ModelDuck();
model.PerformFly();
model.FlyBehavior = new FlyRocketPowered();
model.PerformFly();